package com.mgy.db.dao.mapper;

import com.mgy.db.TableRouter;
import com.mgy.db.common.domain.Tag;
import com.mgy.db.common.query.TagQuery;
import com.mgy.db.sharding.annotation.MybatisMapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * (Tag)表数据库访问层
 *
 * @author maguoyong
 * @since 2020-01-29 12:03:49
 */
@MybatisMapper("tag")
public interface TagMapper {
    /**
     * 通过ID查询单条数据
     *
     * @param id          主键
     * @param tableRouter 分库对象
     * @return 实例对象
     */
    Tag queryById(@Param("id") Long id, TableRouter tableRouter);

    /**
     * 通过主键删除数据
     *
     * @param id          主键
     * @param tableRouter 分库对象
     * @return 影响行数
     */
    Integer deleteById(@Param("id") Long id, TableRouter tableRouter);

    /**
     * 新增数据（实体对象带分库分表信息）
     *
     * @param tag 实例对象
     * @return 影响行数
     */
    Long insert(@Param("obj") Tag tag);

    /**
     * 新增数据（实体对象不带分库分表信息，TableRouter带分库分表信息）
     *
     * @param tag         实例对象
     * @param tableRouter 分库对象
     * @return 影响行数
     */
    Long insert(@Param("obj") Tag tag, TableRouter tableRouter);

    Long insert3(Tag tag);

    /**
     * 修改数据
     *
     * @return 影响行数
     */
    void batchInsert(@Param("list") List<Tag> list, TableRouter tableRouter);

    /**
     * 修改数据
     *
     * @param tag 实例对象
     * @return 影响行数
     */
    Integer update(@Param("obj") Tag tag);

    /**
     * 修改数据
     *
     * @param tag 实例对象
     * @return 影响行数
     */
    Integer update(@Param("obj") Tag tag, TableRouter tableRouter);

    /**
     * 分页查询列表
     *
     * @param tagQuery 实例对象
     * @return 对象列表
     */
    List<Tag> getTagListWithPage(@Param("obj") TagQuery tagQuery);

    /**
     * 分页查询列表
     *
     * @param tagQuery 实例对象
     * @return 对象列表
     */
    List<Tag> getTagListWithPage(@Param("obj") TagQuery tagQuery, TableRouter tableRouter);

    /**
     * 分页查询列表
     *
     * @param tagQuery 实例对象
     * @return 对象列表
     */
    List<Tag> getTagList(@Param("obj") TagQuery tagQuery);


    /**
     * 分页查询列表
     *
     * @param tagQuery 实例对象
     * @return 数量
     */
    Long getTagListCount(@Param("obj") TagQuery tagQuery);

    /**
     * 分页查询列表
     *
     * @param tagQuery 实例对象
     * @return 数量
     */
    Long getTagListCount(@Param("obj") TagQuery tagQuery, TableRouter tableRouter);

    List<Tag> queryTagAndNotepadByTagId(@Param("id") Long id, List<TableRouter> tableRoutes);
}